package com.eportal.service;

import com.alibaba.fastjson.JSONObject;
import com.eportal.action.background.TLocksAction;
import com.eportal.domain.*;
import com.eportal.entity.TLocksEntity;
import com.eportal.params.background.TLocks.TLocksSendParam;
import com.eportal.params.background.TLocks.UpdateTlockParam;
import com.eportal.vo.controller.background.tlocks.*;
import com.framework.jqgrid.JqGridPager;
import com.framework.jqgrid.PageEntity;
import com.github.pagehelper.PageInfo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

public interface TLocksService extends BaseService<TLocksEntity>  {

	List<TLock> list(JqGridPager jqGridPager);

	TLock get(Long id);

	TLock getHql(String where);

    void delete(Long id);

    void update(TLock tLock) throws Exception;

    void delete(List<Long> ids);

    TLock add(TLock tLock) throws Exception;

	/**
	 * 硬件新增保存
	 * @param tLock
	 * @param type
	 * @param user 		当前用户
	 */
	Map<String, Object> addMethod(TLock tLock, String type,Sysopt user);

	Map<String, Object> updateMethod(TLock tLock);

	Map<String, Object> deleteMethod(String param_ids);

	Map<String, Object> changeTlockAgt(String pids, String agtcode);

	/**
	 * 硬件分配
	 * @param agtcode 		接收方id（T02_AGTENT主键）
	 * @param communityId	接收方社区id
	 * @param sids
	 * @param user			当前用户
	 * @param userRole		当前用户userRole
	 */
	Map<String, Object> sendToTagentMethod(String agtcode, String communityId, String pids,Sysopt user,int userRole)  throws Exception;

	/**
	 * 硬件安装
	 * @param id
	 * @param type
	 * @param building
	 * @param unit
	 * @param name
	 * @param user			当前用户
	 * @return
	 * @throws Exception
	 */
	Map<String, Object> installTlocksMethod(String id, String type, String building, String unit, String name,Sysopt user) throws Exception;
	/**
	 * 用激活码的情况下会使用到，communityid、agtcode
	 * @param id
	 * @param type
	 * @param building
	 * @param unit
	 * @param name
	 * @param communityid
	 * @param agtcode
	 * @param user 			当前用户
	 * @return
	 * @throws Exception
	 */
	public Map<String, Object> installTlocksMethod(String id, String type, String building, String unit, String name,String communityid,String agtcode,Sysopt user) throws Exception ;

	Long validateLock(String pid, String checkCode);

	List<LocksInstallLog> installList(JqGridPager jqGridPager);

	List<LocksDeliveryLog> listLocksDeliveryLog(JqGridPager jqGridPager);

	List<Map<String, String>> tlockList(String type, String communityId);

	/**
	 *
	 * @param jqGridPager
	 * @param pid1
	 * @param pid2
	 * @param type
	 * @param user			当前用户
	 * @param userRole		当前用户userRole
	 * @return
	 */
	List<Map<String, Object>> recoveryListList(JqGridPager jqGridPager, String pid1, String pid2, String type,Sysopt user,int userRole);

	/**
	 * 硬件回收
	 * Updated by Saber on 2017/7/27 上午10:48
	 * @param pids 		设备编号
	 * @param user 		当前用户
	 * @param userRole 	当前用户userRole
	 */
	Map<String, Object> recoveryMethod(String pids,Sysopt user,int userRole);

	List<TLock> listTLocks(JqGridPager jqGridPager);

	List<TLock> getBySql(String where);

	Map<String, String> getInstallTlock(Long sid);

	/**
	 *
	 * @param id
	 * @param type
	 * @param building
	 * @param unit
	 * @param name
	 * @param beforeunit
	 * @param sysopt		当前用户
	 * @return
	 * @throws Exception
	 */
	Map<String, Object> updateMethod(String id, String type, String building, String unit, String name, String beforeunit,Sysopt sysopt) throws Exception;

	Map<String, Object> checkMethod(String ids, String type);

	Map<String, Object> installLock(TCommunity tCommunity, TLock tlock);

	/**
	 *
	 * @param agtCode
	 * @param communityId
	 * @param pidBegin
	 * @param pidEnd
	 * @param user			当前用户
	 * @param userRole		当前用户userRole
	 * @return
	 */
	Map<String, Object> sendToBatchTagentMethod(String agtCode, String communityId, String pidBegin, String pidEnd,Sysopt user,int userRole);

	List<TLock> listPageApp(String where, int beginNum, int endNum);

	int countSizeApp(String where);

	/**
	 *
	 * @param entity
	 * @param user		当前用户
	 * @return
	 */
	 Map<String, Object> SyncTo(TLock entity,Sysopt user);

	TLock getByPid(String pid);



//todo =======================================================================================================================================
	/**
	 * 分页查询
	 * @author Saber
	 * @Date 2017/7/27 下午7:03
	 * @param pageEntity	分页对象
	 * @param param 		查询参数
	 * @param user 			当前用户
	 * @param userRole 		当前用户userRole
	 * @return
	 */
	PageInfo<TlockListSendVO> queryForPage(PageEntity pageEntity,TLocksSendParam param,Sysopt user,int userRole);

	/**
	 * 智能门禁回收列表
	 * @author Saber
	 * @Date 2017/8/1 上午10:51
	 * @param pageEntity	分页对象
	 * @param pId1 			pId开始
	 * @param pId2 			pId截止
	 * @param user 			当前用户
	 * @param userRole 		当前用户userRole
	 * @param type          类型：0：一般合作方硬件，1：锁厂硬件
	 * @return
	 */
	PageInfo<TlockRecoveryListVO> recoveryList(PageEntity pageEntity,String pId1,String pId2,String type,Sysopt user,int userRole);

    /**
     * 智能门禁发胡列表
     * @author Saber
     * @Date 2017/8/1 下午12:49
     * @param pageEntity    分页对象
     * @param pId1          pId开始
     * @param pId2          pId结束
     * @param user          当前用户
     * @param userRole      当前用户userRole
     * @return
     */
    PageInfo<TLocksEntity> notSendList(PageEntity pageEntity,String pId1,String pId2,Sysopt user,int userRole);

    /**
     * 智能门禁回收
     * @author Saber
     * @Date 2017/8/1 下午2:29
     * @param pIds          pId集合
     * @param user          当前用户
     * @param userRole      当前用户userRole
     * @return
     */
    JSONObject recovery(String pIds,Sysopt user,int userRole);


    /**
     * 智能门禁安装列表（未安装的列表）
     * @author Saber
     * @Date 2017/8/1 下午4:39
     * @param pageEntity        分页对象
     * @param user              当前用户
     * @param userRole          当前用户userRole
     * @return
     */
    PageInfo<TLocksEntity> installTlocksList(PageEntity pageEntity, Sysopt user, int userRole);


    /**
     * 门禁安装
     * @author Saber
     * @Date 2017/8/1 下午6:12
     * @param request
     * @param sId               sId
     * @param isPubunit         0:私有门禁,1:公共门禁
     * @param cBuildingId		楼栋id
     * @param unitId     		单元id 对应于T032_CInstallUnit.SID 安装位置点编号在整个掌联系统中唯一编码
     * @param lockName   		门禁名称
     * @param user              当前用户
     * @param userRole          当前用户userRole
	 * @see #installTlocksMethod(String, String, String, String, String, Sysopt)
     * @return
     */
    JSONObject installTlocks(HttpServletRequest request, Long sId, String isPubunit, String cBuildingId, String unitId, String lockName, Sysopt user, int userRole);

    /**
     * 用激活码的情况下会使用到，communityid、agtcode
     * @author Saber
     * @Date 2017/8/1 下午6:46
     * @param request
     * @param sId               sId
     * @param isPubunit         0:私有门禁安装点,1:公共门禁安装点
     * @param cBuildingId		楼栋id
     * @param unitId     		单元id 对应于T032_CInstallUnit.SID 安装位置点编号在整个掌联系统中唯一编码
     * @param lockName   		安装钥匙名称
     * @param communityid       社区id
     * @param agtcode           合作方id
     * @param user 			    当前用户
	 * @see #installTlocksMethod(String, String, String, String, String, String, String, Sysopt)
     * @return
     * @throws Exception
     */
    JSONObject installTlocks(HttpServletRequest request, Long sId, String isPubunit, String cBuildingId, String unitId, String lockName, String communityid, String agtcode, Sysopt user);

    /**
     * 硬件安装接口
     * @author Saber
     * @Date 2017/8/1 下午6:25
     * @param entity    锁
     * @param user      当前用户
     * @return
     */
    JSONObject SyncTo(TLocksEntity entity,Sysopt user);

	/**
	 * 智能门禁已安装记录列表接口
	 * @author Saber
	 * @Date 2017/8/10 下午2:59
	 * @param pageEntity		分页对象
	 * @param user				当前用户
	 * @param userRole			当前用户userRole
	 * @param operationContent	操作内容
	 * @param operator			操作人
	 * @param sendTime			操作时间
	 * @return
	 */
	PageInfo<TLocksInstalllogListVO> installLogList(PageEntity pageEntity, Sysopt user, int userRole, String operationContent, String operator, String sendTime);

	/**
	 * 门禁列表
	 * @author Saber
	 * @Date 2017/8/10 下午2:38
	 * @param type				钥匙类型 private :私有钥匙  share:共有钥匙
	 * @param communityId		小区id
	 * @param user				当前用户
	 * @param userRole			当前用户userRole
	 * @see TLocksService#tlockList(String, String)
	 * @return
	 */
	List<TlockListVO> tlockList(String type, String communityId, Sysopt user, int userRole);

	/**
	 * 获取安装点详情
	 * @author Saber
	 * @Date 2017/8/11 上午10:06
	 * @param sId	sId
	 * @see #getInstallTlock(Long)
	 * @return
	 */
	InstallTlockDetailVO getInstallTlockDetail(Long sId);

	/**
	 * 安装点修改
	 * @author Saber
	 * @Date 2017/8/11 下午12:21
	 * @param request
	 * @param param			参数
	 * @param user			当前用户
	 * @param userRole 		当前用户userRole
	 * @see TLocksService#updateMethod(String, String, String, String, String, String, Sysopt)
	 * @return
	 */
	JSONObject update(HttpServletRequest request,UpdateTlockParam param, Sysopt user, int userRole);

	/**
	 * 智能门禁更换
	 * @author Saber
	 * @Date 2017/8/11 下午2:22
	 * @param sId			sId
	 * @param newPid		新门禁的sId
	 * @param checkCode		激活码
	 * @param user			当前用户
	 * @param userRole		当前用户userRole
	 * @see TLocksAction#saveChange()
	 * @return
	 */
	JSONObject saveChange(Long sId, String newPid, String checkCode, Sysopt user, int userRole);

	/**
	 * 智能门禁发货
	 * @author Saber
	 * @Date 2017/8/16 上午11:49
	 * @param agtCode		合作方				agtCode或communityId其中一个不能为空
	 * @param communityId	小区id
	 * @param sIds			sId集合 用,分割		非空
	 * @param user			当前用户
	 * @param userRole		当前用户userRole
	 * @see TLocksService#sendToTagentMethod(String, String, String, Sysopt, int)
	 * @return
	 */
	JSONObject sendToAgent(String agtCode, String communityId, String sIds, Sysopt user, int userRole);

	/**
	 * 智能门禁批量发货
	 * @author Saber
	 * @Date 2017/8/16 下午1:40
	 * @param agtCode		合作方				agtCode或communityId其中一个不能为空
	 * @param communityId	小区id
	 * @param pIdBegin		pId初始值
	 * @param pIdEnd		pId结束值
	 * @param user			当前用户
	 * @param userRole		当前用户userRole
	 * @see TLocksService#sendToBatchTagentMethod(String, String, String, String, Sysopt, int)
	 * @return
	 */
	JSONObject sendToBatchTagent(String agtCode, String communityId, String pIdBegin, String pIdEnd, Sysopt user, int userRole);

	/**
	 * 硬件检测（是否合格）
	 * @author Saber
	 * @Date 2017/8/21 下午1:13
	 * @param ids		sId集合 用,分割
	 * @param type		检验状态,0:未检测，1：检查通过，2检查不通过
	 * @param user		当前用户
	 * @param userRole	当前用户userRole
	 * @see TLocksService#checkMethod(String, String)
	 * @return
	 */
	JSONObject check(String ids, String type, Sysopt user, int userRole);

	/**
	 * 硬件新增保存
	 * @author Saber
	 * @Date 2017/8/21 下午1:54
	 * @param pId				pId
	 * @param checkCode			激活码
	 * @param installLockName	门禁名称
	 * @param user				当前用户
	 * @param userRole			当前用户userRole
	 * @see TLocksAction#add()
	 * @see TLocksService#addMethod(TLock, String, Sysopt)
	 * @return
	 */
	JSONObject add(String pId, String checkCode, String installLockName, Sysopt user, int userRole);

	/**
	 * 导出激活码（获取要导出的数据）
	 * @author Saber
	 * @Date 2017/8/21 下午4:38
	 * @param pIdBegin		pId初始值
	 * @param pIdEnd		pIdJ结束值
	 * @param user			当前用户
	 * @param userRole		当前用户userRole
	 * @see TLocksAction#export()
	 * @return
	 */
	List<TLocksEntity> getByPidAndAgtCodeForExport(String pIdBegin, String pIdEnd, Sysopt user, int userRole);
}
